package org.example.demo1.DAO;

import org.apache.ibatis.annotations.Param;
import org.example.demo1.Entity.Chapter;
import org.example.demo1.Entity.ChapterContent;
import org.example.demo1.Entity.Novel;
import java.util.List;
import java.util.Map;

public interface NovelDao {
    // 分页查询小说列表
    List<Novel> getNovelListPagination(Map<String, Object> params);
    
    // 获取小说总数（用于分页）
    int getNovelCount(Map<String, Object> params);
    
    // 根据ID获取小说
    Novel getNovelById(int novel_id);
    
    // 插入新小说
    int insertNovel(Novel novel);
    
    // 更新小说信息
    int updateNovel(Novel novel);
    
    // 删除小说
    int deleteNovel(int novel_id);

    List<Novel> getNovelsUser();

    /**
     * 根据小说ID获取章节列表（分页+状态过滤）
     * @param params 参数Map（包含novelId, pageNum, pageSize, chapterStatus）
     * @return 章节列表
     */
    List<Chapter> getAllChaptersByNovelId(Map<String, Object> params);

    /**
     * 根据章节ID获取章节内容
     * @param chapterId 章节ID
     * @return 章节内容实体
     */
    ChapterContent getChapterContentByChapterId(@Param("chapterId") Integer chapterId);
    
    // 新增：插入小说分类关系
    int insertNovelCategoryRelation(@Param("novelId") int novelId, @Param("categoryId") int categoryId);
    
    // 新增：删除小说的所有分类关系
    int deleteNovelCategoryRelations(@Param("novelId") int novelId);
    
    /**
     * 插入新章节
     * @param chapter 章节实体
     * @return 影响行数
     */
    int insertChapter(Chapter chapter);
    
    /**
     * 插入章节内容
     * @param chapterContent 章节内容实体
     * @return 影响行数
     */
    int insertChapterContent(ChapterContent chapterContent);
    
    /**
     * 更新章节信息
     * @param chapter 章节实体
     * @return 影响行数
     */
    int updateChapter(Chapter chapter);
    
    /**
     * 更新章节内容
     * @param chapterContent 章节内容实体
     * @return 影响行数
     */
    int updateChapterContent(ChapterContent chapterContent);
    
    /**
     * 根据小说ID获取最大章节序号
     * @param novelId 小说ID
     * @return 最大章节序号
     */
    Integer getMaxChapterNumberByNovelId(@Param("novelId") Integer novelId);
}